/*
 * To change this template, choose Tools | Templates
 * and open the template in the editor.
 */
package repository;

import beans.Estoque;
import connection.ConnectionBD;
import interacesRepository.IRepositoryEstoque;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.sql.Statement;
import java.util.ArrayList;
import java.util.Collection;
import java.util.List;
import java.util.logging.Level;
import java.util.logging.Logger;

/**
 *
 * @author dlvcpe
 */
public class RepositoryEstoque implements IRepositoryEstoque{
    
    private static RepositoryEstoque instancia;
    
    private RepositoryEstoque(){     
    }
    
    public static RepositoryEstoque getInstancia(){
        if (instancia == null){
            instancia = new RepositoryEstoque();
	}
	return instancia;
    }
    
    

    public void inserir(Estoque estoque){
     try {

            Statement stmt = ConnectionBD.getInstance().createStatement();
            String linhaSQL = new String();
            
            //TODO Ver a tabela do Estoque 
            linhaSQL = ("insert into tb_estoque_faccao(ref_faccao, ref_produto, quantidade) values "
//                    + "((select REF(f) from tb_faccao f where f.id = '" + estoque.getFaccao().getId() +
//                    "'), (select REF(p) from tb_produto p where p.referencia = '" + 
//                    estoque.getProduto().getReferencia() + "'), '" + estoque.getQuantidade() 
                    + "')");
//Para quando tiver pronto o BD
estoque.getId();
estoque.getNomeProduto();
estoque.getQuantidade();
estoque.setEstoqueDisponivel(estoque.getEstoqueDisponivel() + estoque.getQuantidade());
            
//             if (Main.paramentros.getImprimirSQL() == 1){
//                System.out.println(linhaSQL);
//            }

            stmt.execute(linhaSQL);



            } catch (SQLException ex) {
                Logger.getLogger(RepositoryEstoque.class.getName()).log(Level.SEVERE, null, ex);
            }
    }
    
    public void excluir(Estoque estoque){
        
    
       try {
            Statement stmt = ConnectionBD.getInstance().createStatement();
            String linhaSQL = ("delete from tb_estoque_faccao ef "
                    + "where ef.ref_faccao.id = '" + estoque.getId() + "'");
//             if (Main.paramentros.getImprimirSQL() == 1){
//                System.out.println(linhaSQL);
//            }
           stmt.executeQuery(linhaSQL);
        } catch (SQLException ex) {
            Logger.getLogger(RepositoryEstoque.class.getName()).log(Level.SEVERE, null, ex);
        }
    
//     try {
//            Statement stmt = BC.getInstance().createStatement();
//            String linhaSQL = ("delete from tb_funcionario where id = '" + funcionario.getId() + "'");
//             if (Main.paramentros.getImprimirSQL() == 1){
//                System.out.println(linhaSQL);
//            } 
//            ResultSet rs = stmt.executeQuery(linhaSQL);
//
//           
//        } catch (SQLException ex) {
//            Logger.getLogger(RepositorioFuncionario.class.getName()).log(Level.SEVERE, null, ex);
//        }
    }
    
    
   
    public Collection consultarEstoque(String estoque){
        List c = new ArrayList();

        try {
            Statement stmt = ConnectionBD.getInstance().createStatement();
//TODO ALTERAR QUANDO TIVER A CONSULTA AO BANCO
            String linhaSQL = ("select ef.ref_produto.referencia, ef.ref_produto.descricao, "
                    + "ef.ref_faccao.id, ef.ref_faccao.nome, ef.quantidade from tb_estoque_faccao ef "
                    + "where ef.ref_produto.referencia = '" + estoque + "'");


//            if (Main.paramentros.getImprimirSQL() == 1){
//                System.out.println(linhaSQL);
//            }

            ResultSet rs = stmt.executeQuery(linhaSQL);
//TODO VER AS CONSULTAS
            //Caso tenhamos mais de um resultado
//           while (rs.next()){
//
//              Produto p = new Produto();
//              
//              EstoqueFaccao ef = new EstoqueFaccao();
//
//              p.setReferencia(Integer.parseInt(rs.getObject(1).toString()));
//              p.setDescricao(rs.getObject(2).toString());
////              f.setId(Integer.parseInt(rs.getObject(3).toString()));
////              f.setNome(rs.getObject(4).toString());
//              ef.setQuantidade(Integer.parseInt(rs.getObject(5).toString()));
//
////              ef.setFaccao(f);
//              ef.setProduto(p);
//
//              c.add(ef);
//            }

         }
        catch (SQLException ex) {
            Logger.getLogger(RepositoryEstoque.class.getName()).log(Level.SEVERE, null, ex);
        }
        return c;
    }
    
    public void alterar(Estoque estoque){
        try {
            Statement stmt = ConnectionBD.getInstance().createStatement();
            String linhaSQL = new String();
            //TODO ALTERAR DE ACORDO COM AS TABELAS
            linhaSQL = ("update tb_estoque_faccao ef set ef.quantidade = '" + estoque.getQuantidade() + 
//                    "' where ef.ref_faccao.id = '" + estoque.getFaccao().getId() + 
//                    "' and ef.ref_produto.referencia = '" + estoque.getProduto().getReferencia() + 
                    "'");
            
//             if (Main.paramentros.getImprimirSQL() == 1){
//                System.out.println(linhaSQL);
//            }
//            
             stmt.execute(linhaSQL);
        } catch (SQLException ex) {
            Logger.getLogger(RepositoryEstoque.class.getName()).log(Level.SEVERE, null, ex);
        }
    }
    
    public Estoque consultarEstoqueID(Integer id){return null;
}

    public Collection consultartodos(){return null;
}
    public int totalCadastrados(){return 0;
}
    
}
   